Итак, у нас есть хранилище. Мы умеем его создавать и открывать. Только наше хранилище пока пустое. Я еще упоминал, что многое программное обеспечение Microsoft хранит данные именно так. То есть организует хранилище куда и помещает свои данные. Не знаю как все программное обеспечение, но WORD точно. Итак, пока не вдаваясь в подробности. Открыв хранилище и получив к нему интерфейс мы можем получить интерфейс к перечислителям EnumElements, а у этого перечислителя есть метод Next. С помощью него можно перебирать содержимое хранилища. Если это понятно, то вот код. Не вдавайтесь в детали пока. Главное просто посмотреть сейчас как это работает. Я создал документ WORD и поместил в него текст и графику. Вы можете использовать любой. Вот пример.
#include "stdafx.h"
#include "windows.h"
#include "ole2.h"
#include "iostream.h"
int main(int argc, char* argv[])
{
OLECHAR filename[20];
wcscpy(filename,L"1.xls");
LPSTORAGE pIStorage=NULL;
HRESULT rez;
rez=StgOpenStorage(filename,NULL, STGM_READ |
STGM_SHARE_EXCLUSIVE,NULL,0,&pIStorage);
if (!FAILED(rez))
{
cout << "Ok open" << endl;
LPENUMSTATSTG lpEnum=NULL;
pIStorage->EnumElements(0,NULL,0,&lpEnum);
if (lpEnum!=NULL)
{
cout << "Ok enum" << endl;
ULONG uCount;
STATSTG stat;
while (lpEnum->Next(1,&stat,&uCount)==S_OK)
{
cout << (LPSTR)stat.pwcsName << endl;
}
lpEnum->Release();
}
else cout << "Error enum" << endl;
pIStorage->Release();
}
else cout << "Error open" << endl;
return 0;
}
Результат его работы такой.
Ok open Ok enum D 1 M O W Press any key to continue
Ну очень впечатляет. Самое главное, что это хранилище. Открылось и сработало. Если хотите видеть нормальные надписи, то смотрите "Шаг 57 - OLECHAR в CHAR и обратно", о том как конвертировать символы. То же самое будет работать для Excel. Попробуйте.



Обратите внимание на сигнатуру файлов. Они все начинаются с РП. Вот такие файлы и есть хранилища и с ними можно работать указанными методами.